<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>大数据技术课程仓库</title>
    <!-- 科技风格CSS -->
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;500&display=swap');

        :root {
            --primary-color: #0066ff;
            --secondary-color: #00c8ff;
            --dark-bg: #0a192f;
            --card-bg: #112240;
            --text-primary: #e6f1ff;
            --text-secondary: #8892b0;
            --accent-color: #64ffda;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: "Microsoft YaHei", "Roboto Mono", monospace, sans-serif;
        }

        body {
            background-color: var(--dark-bg);
            color: var(--text-primary);
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            position: relative;
            overflow-x: hidden;
        }

        /* 粒子背景层 */
        #particle-canvas {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
        }

        /* 头部样式 */
        header {
            background: rgba(17, 34, 64, 0.8);
            backdrop-filter: blur(8px);
            border-bottom: 1px solid rgba(100, 255, 218, 0.2);
            padding: 25px 0;
            position: relative;
            z-index: 10;
        }

        .header-container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 0 20px;
            text-align: center;
            position: relative;
        }

        h1 {
            color: var(--text-primary);
            font-size: 28px;
            margin-bottom: 10px;
            font-weight: 600;
            letter-spacing: 1px;
            text-shadow: 0 0 10px rgba(100, 255, 218, 0.3);
            position: relative;
            display: inline-block;
        }

        h1::before {
            content: "{ ";
            color: var(--accent-color);
        }

        h1::after {
            content: " }";
            color: var(--accent-color);
        }

        .header-desc {
            color: var(--text-secondary);
            font-size: 16px;
            font-weight: 300;
            letter-spacing: 0.5px;
        }

        /* 主体内容 */
        main {
            flex: 1;
            max-width: 1200px;
            margin: 50px auto;
            padding: 0 20px;
            position: relative;
            z-index: 1;
        }

        /* 横向多列卡片布局 */
        .repo-container {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
            gap: 30px;
            margin-bottom: 50px;
        }

        /* 仓库卡片 */
        .repo-card {
            background: var(--card-bg);
            border-radius: 8px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
            padding: 30px;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            border: 1px solid rgba(100, 255, 218, 0.1);
            position: relative;
            overflow: hidden;
            opacity: 0;
            transform: translateY(20px);
        }

        .repo-card::before {
            content: "";
            position: absolute;
            top: 0;
            left: 0;
            width: 4px;
            height: 100%;
            background: linear-gradient(to bottom, var(--primary-color), var(--secondary-color));
        }

        .repo-card:hover {
            transform: translateY(-8px) scale(1.02);
            box-shadow: 0 20px 45px rgba(0, 0, 0, 0.5);
            border-color: rgba(100, 255, 218, 0.4);
        }

        .card-header {
            display: flex;
            align-items: center;
            margin-bottom: 20px;
        }

        .card-icon {
            width: 40px;
            height: 40px;
            background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
            color: var(--text-primary);
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-right: 15px;
            font-size: 18px;
            box-shadow: 0 0 15px rgba(0, 102, 255, 0.5);
        }

        .card-title {
            color: var(--text-primary);
            font-size: 22px;
            font-weight: 500;
            letter-spacing: 0.5px;
        }

        .card-desc {
            color: var(--text-secondary);
            font-size: 14px;
            margin-bottom: 25px;
            line-height: 1.6;
        }

        .repo-btn {
            display: block;
            width: 100%;
            background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
            color: var(--text-primary);
            text-align: center;
            padding: 14px 0;
            border-radius: 6px;
            text-decoration: none;
            font-size: 16px;
            font-weight: 500;
            letter-spacing: 0.5px;
            transition: all 0.3s ease;
            position: relative;
            overflow: hidden;
            z-index: 1;
            border: none;
        }

        /* 按钮流光效果 */
        .repo-btn::after {
            content: "";
            position: absolute;
            top: 0;
            left: -100%;
            width: 200%;
            height: 100%;
            background: linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.4), transparent);
            transition: all 0.5s ease;
        }

        .repo-btn:hover::after {
            left: 100%;
        }

        /* 使用说明 */
        .guide-card {
            background: var(--card-bg);
            border-radius: 8px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
            padding: 30px;
            border: 1px solid rgba(100, 255, 218, 0.1);
            position: relative;
        }

        .guide-title {
            color: var(--text-primary);
            font-size: 20px;
            font-weight: 500;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            letter-spacing: 0.5px;
        }

        .guide-title::before {
            content: "//";
            color: var(--accent-color);
            margin-right: 10px;
            font-family: "Roboto Mono", monospace;
        }

        .guide-list {
            color: var(--text-secondary);
            font-size: 15px;
            padding-left: 20px;
            line-height: 2;
            list-style-type: none;
        }

        .guide-list li {
            position: relative;
            padding-left: 25px;
        }

        .guide-list li::before {
            content: ">";
            color: var(--accent-color);
            position: absolute;
            left: 0;
            font-family: "Roboto Mono", monospace;
        }

        /* 页脚 */
        footer {
            background: rgba(10, 25, 47, 0.9);
            color: var(--text-secondary);
            text-align: center;
            padding: 25px 0;
            font-size: 14px;
            border-top: 1px solid rgba(100, 255, 218, 0.1);
            position: relative;
            z-index: 10;
        }

        /* 悬浮代码动画 */
        .code-decoration {
            position: absolute;
            font-family: "Roboto Mono", monospace;
            color: var(--accent-color);
            opacity: 0.07;
            font-size: 14px;
            pointer-events: none;
            animation: float var(--float-time, 6s) ease-in-out infinite;
        }

        @keyframes float {
            0% {
                transform: translateY(0) rotate(0deg);
                opacity: 0.05;
            }

            50% {
                transform: translateY(-10px) rotate(2deg);
                opacity: 0.1;
            }

            100% {
                transform: translateY(0) rotate(0deg);
                opacity: 0.05;
            }
        }
    </style>
</head>

<body>
    <!-- 粒子背景 -->
    <canvas id="particle-canvas"></canvas>

    <!-- 头部 -->
    <header>
        <div class="header-container">
            <h1>教学过程资料</h1>
            <p class="header-desc">// 大数据技术、计算机应用技术</p>
        </div>
    </header>

    <!-- 主体内容 -->
    <main>
        <div class="repo-container">
            <div class="repo-card">
                <div class="card-header">
                    <div class="card-icon"><i class="fas">&#xf1c0;</i></div>
                    <h2 class="card-title">大数据技术 2401</h2>
                </div>
                <p class="card-desc">包含课程代码示例、实验资料、教学PPT及相关学习资源</p>
                <a href="https://gitee.com/yifenggood/big-data-2401" target="_blank" class="repo-btn">访问2401班仓库</a>
            </div>

            <div class="repo-card">
                <div class="card-header">
                    <div class="card-icon"><i class="fas">&#xf1c0;</i></div>
                    <h2 class="card-title">大数据技术 2402</h2>
                </div>
                <p class="card-desc">包含课程代码示例、实验资料、教学PPT及相关学习资源</p>
                <a href="https://gitee.com/yifenggood/big-data-technology-2402" target="_blank"
                    class="repo-btn">访问2402班仓库</a>
            </div>

            <div class="repo-card">
                <div class="card-header">
                    <div class="card-icon"><i class="fas">&#xf1c0;</i></div>
                    <h2 class="card-title">计算机应用技术</h2>
                </div>
                <p class="card-desc">包含课程代码示例、实验资料、教学PPT及相关学习资源</p>
                <a href="https://gitee.com/yifenggood/computer-learning" target="_blank" class="repo-btn">访问仓库</a>
            </div>
        </div>

        <div class="guide-card">
            <h3 class="guide-title">使用指南</h3>
            <ul class="guide-list">
                <li>点击对应班级按钮，将自动跳转至Gitee仓库页面</li>
                <li>仓库内图片、代码可直接浏览，视频文件需下载后查看</li>
                <li>在寝室也可直接在线访问仓库</li>
                <li>遇到问题可在仓库Issues区提问或联系老师</li>
            </ul>
        </div>
    </main>

    <!-- 页脚 -->
    <footer>
        <p>© 2024 大数据技术课程 | 教学资源平台 | v1.0.3</p>
    </footer>

    <script>
        // 卡片入场动画
        window.onload = function () {
            const cards = document.querySelectorAll('.repo-card');
            cards.forEach((card, index) => {
                setTimeout(() => {
                    card.style.opacity = '1';
                    card.style.transform = 'translateY(0)';
                }, 200 * (index + 1));
            });
            addCodeDecorations();
        };

        // 粒子背景
        const canvas = document.getElementById("particle-canvas");
        const ctx = canvas.getContext("2d");
        let particles = [];

        function resizeCanvas() {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
        }
        window.addEventListener("resize", resizeCanvas);
        resizeCanvas();

        class Particle {
            constructor() {
                this.x = Math.random() * canvas.width;
                this.y = Math.random() * canvas.height;
                this.vx = (Math.random() - 0.5) * 0.5;
                this.vy = (Math.random() - 0.5) * 0.5;
                this.size = Math.random() * 2 + 1;
            }
            update() {
                this.x += this.vx;
                this.y += this.vy;
                if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
                if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
            }
            draw() {
                ctx.beginPath();
                ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
                ctx.fillStyle = "rgba(100,255,218,0.6)";
                ctx.fill();
            }
        }

        function initParticles(num = 130) {
            particles = [];
            for (let i = 0; i < num; i++) {
                particles.push(new Particle());
            }
        }

        function animateParticles() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            particles.forEach(p => {
                p.update();
                p.draw();
            });
            requestAnimationFrame(animateParticles);
        }

        initParticles(130);
        animateParticles();

        // 悬浮代码
        function addCodeDecorations() {
            const codeSnippets = [
                'const data = await fetchBigData();',
                'function analyzeData(dataset) {',
                'class DataScience extends Technology {',
                'import { Hadoop, Spark } from "bigdata";',
                'export default DataAnalytics;',
                'const result = data.map(process);',
                'if (data.size > MAX_SIZE) {',
                'while(true) { optimizeCluster(); }',
                'let cache = new Map();',
                'try { runPipeline(); } catch(e) {}',
                'val df = spark.read.json("input.json")'
            ];
            for (let i = 0; i < 18; i++) {
                const decoration = document.createElement('div');
                decoration.className = 'code-decoration';
                decoration.textContent = codeSnippets[Math.floor(Math.random() * codeSnippets.length)];
                decoration.style.top = `${Math.random() * 90}%`;
                decoration.style.left = `${Math.random() * 90}%`;
                decoration.style.setProperty('--float-time', `${4 + Math.random() * 6}s`);
                document.body.appendChild(decoration);
            }
        }
    </script>
</body>

</html>